package com.wgf.config;

import com.wgf.service.ChatAssistant;
import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.service.AiServices;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class LLMConfig {
    @Bean(name = "qwen")
    public ChatModel chatModelQwen()
    {
        return OpenAiChatModel.builder()
                    .apiKey(System.getenv("aliQwen-api"))
                    .modelName("qwen-plus")
                    .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .build();
    }

    /**
    * @Description: 知识出处，https://api-docs.deepseek.com/zh-cn/
    * @Auther: zzyybs@126.com
    */
    @Bean(name = "deepseek")
    public ChatModel chatModelDeepSeek()
    {
        return
                OpenAiChatModel.builder()
                        .apiKey(System.getenv("deepseek-api"))
                        .modelName("deepseek-chat")
                        //.modelName("deepseek-reasoner")
                        .baseUrl("https://api.deepseek.com/v1")
                .build();
    }



    @Bean
    public ChatAssistant chatAssistant(@Qualifier("qwen") ChatModel chatModelQwen){//@Qualifier("qwen") 注解，您明确指定要注入名为 "qwen" 的 ChatModel Bean
        //创建了一个“魔法”代理对象，它实现了 ChatAssistant 接口。当您调用这个代理对象的任何方法时，
        // 它会自动将方法名、参数等信息，通过 LangChain4j 转换成对大语言模型（通义千问）的请求，并返回模型的响应结果。
        return AiServices.create(ChatAssistant.class,chatModelQwen);
        //AiServices.create()方法   接收一个接口类 (ChatAssistant.class)    接收一个或多个组件（如 ChatModel、内存存储、工具等）
        //动态生成该接口的实现代理      返回这个代理实例
    }
}